home *** CD-ROM | disk | FTP | other *** search
- package opera;
-
- import java.applet.Applet;
- import java.applet.AppletContext;
- import java.applet.AppletStub;
- import java.awt.BorderLayout;
- import java.awt.Component;
- import java.awt.Container;
- import java.awt.FontMetrics;
- import java.awt.Graphics;
- import java.awt.Panel;
- import java.net.MalformedURLException;
- import java.net.URL;
- import java.util.Hashtable;
- import java.util.StringTokenizer;
-
- public class PluginPanel extends Panel implements AppletStub, Runnable {
- private static final int APPSTATE_UNKNOWN = 0;
- private static final int APPSTATE_LOADING = 1;
- private static final int APPSTATE_NOTFOUND = 2;
- private static final int APPSTATE_STOPPED = 3;
- private static final int APPSTATE_RUNNING = 4;
- private static final int APPSTATE_CRASHED = 5;
- private static final int APPSTATE_DESTROYED = 6;
- private static final int APPSTATE_INTERRUPTED = 7;
- private static final int APPSTATE_CLASSFORMATERROR = 8;
- private int appletState = 0;
- private Applet applet;
- private PluginContext context;
- private URL codeBase;
- private URL docBase;
- private Hashtable params;
- private Hashtable attr;
- private PluginClassLoader loader;
- private Thread loaderThread = null;
- private Thread destroyThread = null;
- private static Hashtable classLoaders = new Hashtable();
-
- private int getWidthParam() {
- if (this.attr != null) {
- String var1 = (String)this.attr.get("width");
- if (var1 != null) {
- return new Integer(var1);
- }
- }
-
- return 150;
- }
-
- private int getHeightParam() {
- if (this.attr != null) {
- String var1 = (String)this.attr.get("height");
- if (var1 != null) {
- return new Integer(var1);
- }
- }
-
- return 150;
- }
-
- public PluginPanel(PluginContext var1, Hashtable var2, Hashtable var3, URL var4) {
- try {
- ((Container)this).setLayout(new BorderLayout());
- this.context = var1;
- this.attr = var2;
- this.params = var3;
- this.docBase = var4;
- String var5 = this.getParameter("codebase");
- if (var5 != null) {
- if (!var5.endsWith("/")) {
- var5 = var5 + "/";
- }
-
- try {
- this.codeBase = new URL(this.docBase, var5);
- } catch (MalformedURLException var12) {
- }
- }
-
- if (this.codeBase == null) {
- String var6 = this.docBase.getFile();
- int var7 = var6.lastIndexOf(47);
- if (var7 >= 0 && var7 < var6.length() - 1) {
- try {
- this.codeBase = new URL(this.docBase, var6.substring(0, var7 + 1));
- } catch (MalformedURLException var11) {
- }
- }
- }
-
- if (this.codeBase == null) {
- this.codeBase = this.docBase;
- }
-
- this.loader = this.getClassLoader(this.codeBase);
- this.loader.grab();
- if (var1 != null) {
- var1.setClassLoader(this.loader);
- }
-
- String var14 = this.getParameter("archive");
- if (var14 != null) {
- StringTokenizer var15 = new StringTokenizer(var14, ",", false);
-
- while(var15.hasMoreTokens()) {
- String var8 = var15.nextToken().trim();
-
- try {
- this.loader.addJar(new URL(this.codeBase, var8));
- } catch (IllegalArgumentException var10) {
- }
- }
- }
-
- this.loader.addJar(this.codeBase);
- if (this.docBase != this.codeBase) {
- this.loader.addJar(this.docBase);
- }
- } catch (Exception var13) {
- ((Throwable)var13).printStackTrace(System.err);
- }
-
- }
-
- PluginClassLoader getClassLoader(URL var1) {
- Hashtable var2 = classLoaders;
- synchronized(var2) {
- PluginClassLoader var3 = (PluginClassLoader)classLoaders.get(var1);
- if (var3 == null) {
- var3 = new PluginClassLoader(var1);
- classLoaders.put(var1, var3);
- }
-
- return var3;
- }
- }
-
- void resizeEmbedBox(int var1, int var2) {
- PluginFrame var3 = (PluginFrame)((Component)this).getParent();
- if (var3 != null) {
- ((Component)var3).setSize(var1, var2);
- }
-
- ((Component)this).setSize(var1, var2);
- if (this.applet != null) {
- this.applet.setSize(var1, var2);
- }
-
- ((Container)this).validate();
- this.attr.put("width", String.valueOf(var1));
- this.attr.put("height", String.valueOf(var2));
- }
-
- public void appletResize(int var1, int var2) {
- ((Component)this).setSize(var1, var2);
- }
-
- public AppletContext getAppletContext() {
- return this.context;
- }
-
- public URL getCodeBase() {
- return this.codeBase;
- }
-
- public URL getDocumentBase() {
- return this.docBase;
- }
-
- public String getParameter(String var1) {
- String var2 = (String)this.params.get(var1.toLowerCase());
- if (var2 == null) {
- var2 = (String)this.attr.get(var1.toLowerCase());
- }
-
- return var2;
- }
-
- public boolean isActive() {
- return this.appletState == 4;
- }
-
- public void loadApplet() {
- try {
- ThreadGroup var1 = this.loader.getThreadGroup();
- this.loaderThread = new Thread(var1, this);
- this.loaderThread.start();
- } catch (Exception var2) {
- ((Throwable)var2).printStackTrace(System.err);
- }
-
- }
-
- public void startApplet() {
- try {
- if (this.applet != null && this.appletState == 3) {
- this.applet.resize(this.getWidthParam(), this.getHeightParam());
- this.applet.start();
- this.appletState = 4;
- this.applet.validate();
- this.applet.setVisible(true);
- this.context.showStatus("Applet started.");
- }
- } catch (Exception var2) {
- ((Throwable)var2).printStackTrace(System.err);
- if (this.appletState != 4) {
- this.appletState = 5;
- ((Component)this).repaint();
- }
- }
-
- }
-
- public void stopApplet() {
- if (this.applet != null && this.appletState == 4) {
- try {
- this.applet.stop();
- } catch (Exception var2) {
- ((Throwable)var2).printStackTrace(System.err);
- }
-
- this.appletState = 3;
- }
-
- }
-
- public void destroyApplet() {
- try {
- if (this.loaderThread != null) {
- try {
- this.loaderThread.interrupt();
- this.loaderThread.join();
- } catch (Exception var3) {
- ((Throwable)var3).printStackTrace(System.err);
- }
-
- this.loaderThread = null;
- }
-
- if (this.loader != null) {
- this.destroyThread = new Thread(this.loader.getThreadGroup(), this);
- if (this.destroyThread != null) {
- this.destroyThread.start();
- }
- }
- } catch (Exception var4) {
- ((Throwable)var4).printStackTrace(System.err);
- } catch (Error var5) {
- ((Throwable)var5).printStackTrace(System.err);
- }
-
- }
-
- public Applet getApplet() {
- return this.applet;
- }
-
- public void run() {
- if (Thread.currentThread() == this.destroyThread) {
- if (this.applet != null) {
- if (this.appletState == 4) {
- this.stopApplet();
- }
-
- this.applet.destroy();
- this.applet = null;
- this.appletState = 6;
- }
-
- if (this.loader != null) {
- this.loader.release();
- this.loader = null;
- }
-
- this.destroyThread = null;
- } else {
- try {
- String var1 = (String)this.attr.get("code");
- if (var1 != null) {
- int var2 = var1.length();
- String var3 = var1.substring(0, var2 - 6);
- this.appletState = 1;
- ((Component)this).repaint();
- Class var4 = this.loader.loadClass(var3);
- if (var4 != null) {
- this.applet = (Applet)var4.newInstance();
- if (this.applet != null) {
- this.appletState = 3;
- ((Component)this).repaint();
- this.applet.setStub(this);
- this.applet.setVisible(false);
- ((Container)this).add("Center", this.applet);
- ((Container)this).validate();
- ((Component)this).setSize(this.getWidthParam(), this.getHeightParam());
- this.applet.resize(this.getWidthParam(), this.getHeightParam());
- this.context.showStatus("Initializing applet.");
-
- try {
- this.applet.init();
- ((Container)this).validate();
- this.startApplet();
- } catch (Exception var6) {
- ((Throwable)var6).printStackTrace(System.err);
- this.appletState = 5;
- ((Component)this).repaint();
- }
- } else {
- this.appletState = 2;
- ((Component)this).repaint();
- }
- } else {
- this.appletState = 2;
- ((Component)this).repaint();
- }
- }
-
- this.loaderThread = null;
- } catch (ClassNotFoundException var7) {
- this.appletState = 2;
- ((Component)this).repaint();
- this.loaderThread = null;
- } catch (Exception var8) {
- this.appletState = 5;
- ((Component)this).repaint();
- ((Throwable)var8).printStackTrace(System.err);
- this.loaderThread = null;
- } catch (ClassFormatError var9) {
- this.appletState = 8;
- ((Component)this).repaint();
- ((Throwable)var9).printStackTrace(System.err);
- } catch (Error var10) {
- this.appletState = 5;
- ((Component)this).repaint();
- ((Throwable)var10).printStackTrace(System.err);
- this.loaderThread = null;
- }
- }
-
- }
-
- public void paint(Graphics var1) {
- try {
- if (this.appletState != 0 && this.appletState != 4) {
- FontMetrics var2 = var1.getFontMetrics();
- String var3;
- switch (this.appletState) {
- case 1:
- var3 = "Loading applet...";
- break;
- case 2:
- var3 = "Applet not found.";
- break;
- case 3:
- var3 = "Applet loaded.";
- break;
- case 4:
- default:
- var3 = "";
- break;
- case 5:
- var3 = "Applet crashed.";
- break;
- case 6:
- var3 = "Applet destroyed.";
- break;
- case 7:
- var3 = "Loading interrupted.";
- break;
- case 8:
- var3 = "Invalid bytecode.";
- }
-
- int var4 = var2.stringWidth(var3);
- int var5 = (((Component)this).getWidth() - var4) / 2;
- if (var5 < 0) {
- var5 = 0;
- }
-
- var1.drawString(var3, var5, ((Component)this).getHeight() / 2);
- }
- } catch (Exception var6) {
- ((Throwable)var6).printStackTrace(System.err);
- }
-
- }
- }
-